home *** CD-ROM | disk | FTP | other *** search
- import java.awt.Graphics;
- import java.io.BufferedInputStream;
- import java.io.InputStream;
- import java.io.StreamTokenizer;
- import java.util.Hashtable;
-
- class XYZChemModel {
- float[] vert;
- Atom[] atoms;
- int[] tvert;
- int[] ZsortMap;
- int nvert;
- int maxvert;
- static Hashtable atomTable = new Hashtable();
- static Atom defaultAtom;
- boolean transformed;
- Matrix3D mat;
- float xmin;
- float xmax;
- float ymin;
- float ymax;
- float zmin;
- float zmax;
-
- XYZChemModel() {
- this.mat = new Matrix3D();
- this.mat.xrot((double)20.0F);
- this.mat.yrot((double)30.0F);
- }
-
- XYZChemModel(InputStream var1) throws Exception {
- this();
- StreamTokenizer var2 = new StreamTokenizer(new BufferedInputStream(var1, 4000));
- var2.eolIsSignificant(true);
- var2.commentChar(35);
-
- while(true) {
- switch (var2.nextToken()) {
- case -3:
- String var3 = var2.sval;
- double var4 = (double)0.0F;
- double var6 = (double)0.0F;
- double var8 = (double)0.0F;
- if (var2.nextToken() == -2) {
- var4 = var2.nval;
- if (var2.nextToken() == -2) {
- var6 = var2.nval;
- if (var2.nextToken() == -2) {
- var8 = var2.nval;
- }
- }
- }
-
- this.addVert(var3, (float)var4, (float)var6, (float)var8);
-
- while(var2.ttype != 10 && var2.ttype != -1) {
- var2.nextToken();
- }
- case -2:
- default:
- break;
- case -1:
- var1.close();
- if (var2.ttype != -1) {
- throw new Exception(var2.toString());
- } else {
- return;
- }
- }
- }
- }
-
- int addVert(String var1, float var2, float var3, float var4) {
- int var5 = this.nvert;
- if (var5 >= this.maxvert) {
- if (this.vert == null) {
- this.maxvert = 100;
- this.vert = new float[this.maxvert * 3];
- this.atoms = new Atom[this.maxvert];
- } else {
- this.maxvert *= 2;
- float[] var6 = new float[this.maxvert * 3];
- System.arraycopy(this.vert, 0, var6, 0, this.vert.length);
- this.vert = var6;
- Atom[] var7 = new Atom[this.maxvert];
- System.arraycopy(this.atoms, 0, var7, 0, this.atoms.length);
- this.atoms = var7;
- }
- }
-
- Atom var9 = (Atom)atomTable.get(var1.toLowerCase());
- if (var9 == null) {
- var9 = defaultAtom;
- }
-
- this.atoms[var5] = var9;
- var5 *= 3;
- this.vert[var5] = var2;
- this.vert[var5 + 1] = var3;
- this.vert[var5 + 2] = var4;
- return this.nvert++;
- }
-
- void transform() {
- if (!this.transformed && this.nvert > 0) {
- if (this.tvert == null || this.tvert.length < this.nvert * 3) {
- this.tvert = new int[this.nvert * 3];
- }
-
- this.mat.transform(this.vert, this.tvert, this.nvert);
- this.transformed = true;
- }
- }
-
- void paint(Graphics var1) {
- if (this.vert != null && this.nvert > 0) {
- this.transform();
- int[] var2 = this.tvert;
- int[] var3 = this.ZsortMap;
- if (var3 == null) {
- this.ZsortMap = var3 = new int[this.nvert];
- int var4 = this.nvert;
-
- while(true) {
- --var4;
- if (var4 < 0) {
- break;
- }
-
- var3[var4] = var4 * 3;
- }
- }
-
- int var9 = this.nvert - 1;
-
- boolean var5;
- do {
- --var9;
- if (var9 < 0) {
- break;
- }
-
- var5 = 0;
-
- for(int var6 = 0; var6 <= var9; ++var6) {
- int var7 = var3[var6];
- int var8 = var3[var6 + 1];
- if (var2[var7 + 2] > var2[var8 + 2]) {
- var3[var6 + 1] = var7;
- var3[var6] = var8;
- var5 = 1;
- }
- }
- } while(var5);
-
- var5 = this.nvert;
- if (var5 > 0 && this.nvert > 0) {
- for(int var11 = 0; var11 < var5; ++var11) {
- int var12 = var3[var11];
- int var13 = var2[var12 + 2];
- if (var13 < 0) {
- var13 = 0;
- }
-
- if (var13 > 15) {
- var13 = 15;
- }
-
- this.atoms[var12 / 3].paint(var1, var2[var12], var2[var12 + 1], var13);
- }
-
- }
- }
- }
-
- void findBB() {
- if (this.nvert > 0) {
- float[] var1 = this.vert;
- float var2 = var1[0];
- float var3 = var2;
- float var4 = var1[1];
- float var5 = var4;
- float var6 = var1[2];
- float var7 = var6;
- int var8 = this.nvert * 3;
-
- while(true) {
- var8 -= 3;
- if (var8 <= 0) {
- this.xmax = var3;
- this.xmin = var2;
- this.ymax = var5;
- this.ymin = var4;
- this.zmax = var7;
- this.zmin = var6;
- return;
- }
-
- float var9 = var1[var8];
- if (var9 < var2) {
- var2 = var9;
- }
-
- if (var9 > var3) {
- var3 = var9;
- }
-
- float var10 = var1[var8 + 1];
- if (var10 < var4) {
- var4 = var10;
- }
-
- if (var10 > var5) {
- var5 = var10;
- }
-
- float var11 = var1[var8 + 2];
- if (var11 < var6) {
- var6 = var11;
- }
-
- if (var11 > var7) {
- var7 = var11;
- }
- }
- }
- }
-
- static {
- atomTable.put("c", new Atom(0, 0, 0));
- atomTable.put("h", new Atom(210, 210, 210));
- atomTable.put("n", new Atom(0, 0, 255));
- atomTable.put("o", new Atom(255, 0, 0));
- atomTable.put("p", new Atom(255, 0, 255));
- atomTable.put("s", new Atom(255, 255, 0));
- atomTable.put("hn", new Atom(150, 255, 150));
- defaultAtom = new Atom(255, 100, 200);
- }
- }
-